package xgodbconfig

import "encoding/json"

// 获取配置项的详情值
//
//	name	要获取的配置项的配置下标
func Getconfigure(name string) Configure {
	if _default.Cache == nil {
		config_default()
	}
	if v, ok := _default.Cache[name]; ok {
		return v
	}
	return Configure{}
}

// 读取配置项的值
//
//	name	要获取的配置项的配置下标
func GetInt(name string) int64 {
	return Getconfigure(name).ValueInt
}

// 获取string值的配置
//
//	name	要获取的配置项的配置下标
func GetString(name string) string {
	return Getconfigure(name).ValueString
}

// 获取开关值
//
//	name	要获取的配置项的配置下标
func GetBool(name string) bool {
	return Getconfigure(name).ValueBool == 1
}

// 获取浮点数值
//
//	name	要获取的配置项的配置下标
func GetFloat(name string) float64 {
	return Getconfigure(name).ValueFloat
}

// 获取select下拉列表
//
//	name	要获取的配置项的配置下标
func GetSelect(name string) string {
	return GetString(name)
}

// 获取个人配置项
//
//	uid		用户ID
//	conf	配置项（采用json读取的方式进行反向解析，所以此处请使用指针进行获取）
func GetUserConfig(uid uint, conf any) error {
	conf_user := ""
	if v, ok := _default.CacheUser[uid]; ok {
		conf_user = v
	} else {
		// 缓存中不存在，就直接读取数据库中的信息进行存储
		temp := ConfigureUser{}
		err := _default.DB.Table(_default.ConfigUserTable).Where("user_id", uid).Find(&temp).Error
		if err != nil {
			return err
		}
		conf_user = temp.Configure
		// 写入cache缓存
		_default.Lock.Lock()
		defer _default.Lock.Unlock()
		_default.CacheUser[uid] = conf_user
	}
	return json.Unmarshal([]byte(conf_user), conf)
}
